#pragma once
#include "DAEFloat3.h"
#include "util.h"
#include <string>

class GMFModel
{
public:
	GMFModel(void);
	virtual ~GMFModel(void);

	tstring GetFileLocation(){return m_FileLocation;}

	void SetAnimation( tstring animation){
		m_HasAnimation = true;
		m_Animation = animation;
	}

	std::tstring GetAnimation(){
		return m_Animation;
	}

	

	bool HasAnimation(){
		return m_HasAnimation;
	}

	void SetName(std::tstring name){
		m_HasName = true;
		m_Name = name;
	}

	std::tstring GetName(){
		return m_Name;
	}

	bool HasName(){
		return m_HasName;
	}

	DAEFloat3 GetScale(){return m_Scale;}
	DAEFloat3 GetRotation(){return m_Rotation;}
	DAEFloat3 GetLocation(){return m_Location;}

	void SetFileLocation(std::tstring location){
		m_FileLocation = location;
	}

	void SetLocation(DAEFloat3 location){
		m_Location = location;
	}

	void SetScale(DAEFloat3 scale){
		m_Scale = scale;
	}

	void SetRotation(DAEFloat3 rotation){
		m_Rotation = rotation;
	}

	void SetGenerateLightIDs(tstring generateLightIDs){
		m_GenerateLightIDs = generateLightIDs;
	}

	tstring GenerateLightIDs(){
		return m_GenerateLightIDs;
	}

	/**
	* Sets the physics type to use for this model.
	* @parma physicsType the physics type to use.
	*/
	void SetPhysicsType(tstring physicsType){
		m_PhysicsType = physicsType;
	}

	/**
	* Returns the physics type to use for this model.
	* @return the physics type to use.
	*/
	tstring& GetPhysicsType(){
		return m_PhysicsType;
	}


private:
	tstring m_FileLocation;
	tstring m_Animation;
	bool m_HasAnimation;
	/**
	* A unique name to identify the model with.s
	*/
	tstring m_Name;
	bool m_HasName;
	DAEFloat3 m_Location;
	DAEFloat3 m_Scale;
	DAEFloat3 m_Rotation;
	/**
	* The way that light ids should be generated.
	*/
	tstring m_GenerateLightIDs;
	/**
	* The physics type that should be generated for this model.
	*/
	tstring m_PhysicsType;
	// -------------------------
	// Disabling default copy constructor and default assignment operator.
	// If you get a linker error from one of these functions, your class is internally trying to use them. This is
	// an error in your class, these declarations are deliberately made without implementation because they should never be used.
	// -------------------------
	GMFModel(const GMFModel& t);
	GMFModel& operator=(const GMFModel& t);
};

